#pragma once


//Enumerator for the Ethnis Statsheet(TM)
enum e_Stats
{
	STAT_UBS,			
	STAT_REND,
	STAT_BRAWL,
	STAT_CLIMB,
	STAT_GRAPPLE,

	STAT_LBS,
	STAT_SWIM,
	STAT_VAULT,
	STAT_SPRINT,
	STAT_STOMP,

	STAT_VIT,
	STAT_ARMOR,
	STAT_SURVIVAL,
	STAT_TOUGHNESS,
	STAT_RESILIENCE,

	STAT_CRD,
	STAT_STEALTH,
	STAT_EVASION,
	STAT_PRECISION,
	STAT_WEAPONRY,

	STAT_INT,
	STAT_BIOLOGY,
	STAT_GEOLOGY,
	STAT_LINGUISTICS,
	STAT_ENGINEERING,

	STAT_MTP,
	STAT_DIVINATION,
	STAT_IMMOLATION,
	STAT_COMBINATION,
	STAT_MANIPULATION,

	STAT_PRS,
	STAT_MUSIC,
	STAT_CRAFT,
	STAT_CHARM,
	STAT_COOKING,

	STAT_NUMOFSTATS
};
enum miscStats
{
	MSTAT_CURRPIERCE = STAT_NUMOFSTATS,
	MSTAT_CURRIMPACT,
	MSTAT_CURRENERGY,
	MSTAT_CURRMANIA,
	MSTAT_CURRDISCIPLINE,
	MSTAT_CURRAGRESSION,
	MSTAT_META,
	MSTAT_SIZE
};
static char* statNames[MSTAT_SIZE] =
{
	"Upper Body",			
	"Rend",
	"Brawl",
	"Climb",
	"Grapple",

	"Lower Body",
	"Swim",
	"Vault",
	"Sprint",
	"Stomp",

	"Vitality",
	"Armor",
	"Survival",
	"Toughness",
	"Resilience",

	"Coordination",
	"Stealth",
	"Evasion",
	"Precision",
	"Weaponry",

	"Intelligence",
	"Biology",
	"Geology",
	"Linguistics",
	"Engineering",

	"Metaphysics",
	"Divination",
	"Immolation",
	"Combination",
	"Manipulation",

	"Presence",
	"Music",
	"Craft",
	"Charm",
	"Cooking",

	"PierceDamage",
	"ImpactDamage",
	"EnergyDamage",
	"ManiaDamage",
	"DisciplineDamage",
	"AgressionDamage"
};


enum Momentums
{
	MOM_INPUT,
	MOM_KINETICARM,
	MOM_NUM
};

struct	buff
{
	/*A buff is a single symptom of an effect*/
	int statToAffect;	//The ID of the stat to be affected.
	int amount;			//How much it modifies by.
	buff(){};
	buff(int stat, int value)
	{
		statToAffect = stat;
		amount = value;
	}
};
struct	effect
{
	int		maxElements;	//How many elements we can have at maximum.
	int		curElements;	//How many elements there are currently.
	bool	isOverTime;		//True? Effect over time. Else cast once, remove when timer = 0;
	int		duration;		//How long the effects last
	char*	effectName;
	buff*	buffList;		//All the buffs currently within the object.

	effect(){curElements = -1;}
	void init(int Elements, int a_duration, bool a_isOverTime, char* a_effectName)
	{
		//If the user never itializes, then addEffect wont' run through.
		isOverTime		= a_isOverTime;
		curElements		= 0;
		maxElements		= Elements;
		duration		= a_duration;
		buffList		= new buff[maxElements];
		effectName		=a_effectName;
	}
	void addbuff(int stat, int amount)
	{
		if(curElements != -1 && curElements < maxElements){
				buffList[curElements] = buff(stat,amount);
				curElements++;
		}//Endif
	}
};
 
enum AnimationStates
{
	ANI_SWING,
	ANI_RUN,
	ANI_JUMP,
	ANI_DEATH,
	ANI_IDLE,
	ANI_MAX
};

enum EquipSlots
{
	Helmet,
	Cuirass,
	Gauntlets, 
	Boots,
	Weaponry,
	Kinetic1,	//If a kinetic arm is not armed, it can be launched as a projectile. Whatever it sticks to becomes its waypoint
	Kinetic2,
	Kinetic3,
	Kinetic4,
	MaxEquipables
};
enum ActivitySlots
{
	ACT_WEAPON,
	ACT_MAGIC,
	ACT_KINECTARM1,
	ACT_KINECTARM2,
	ACT_KINECTARM3,
	ACT_KINECTARM4,
	ACT_MAX
};

#define elem_UBS 0	//Gas
#define elem_LBS 1	//Liquid
#define elem_VIT 2	//Solid
#define elem_CRD 3	//Energy
#define elem_INT 4	//Kinetic
#define elem_MTP 5	//Metaphysic
#define elem_PRS 6	//Auric

//Methods of Magic
#define method_DIV 0
#define method_IMM 1
#define method_COM 2
#define method_MAN 3

//Entity States
#define stateNeutral 0
#define stateJumpRise  1
#define stateJumpFall  2

//Used these to make passing a variable into check collision a little more intuitive
#define CheckGravity	0
#define RecheckGravity	1
#define CollideY		2
#define CollideX		3

#define Character_Mesh	 5
#define Torso_Mesh		 10